﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Crosland.Automotriz.Logic.Linq;
using Crosland.Automotriz.Core;
using DevExpress.Web.ASPxPivotGrid;
using DevExpress.XtraPivotGrid;
using System.Data;
using Crosland.Automotriz.Facade.Interface;
using Crosland.Automotriz.Facade.Facade;
using System.Configuration;
using System.Data.SqlClient;
using Crosland.Automotriz.Logic.ControlExeption;
using Crosland.Automotriz.Logic.Funciones;

namespace Crosland.Automotriz.Web.Repuestos
{
    public partial class wFrmSeguimientoImportacion : System.Web.UI.Page
    {
        string idNegocio = ConfigurationManager.AppSettings["Negocio"];
        private static clsImportacionesLogic Importacion = new clsImportacionesLogic();
        private iFacadePronosticoImportacion logimportacion = new FacadePronosticoImportacion();
        private IEnumerable<Object> lista = null;
        private static IEnumerable<Object> ListarEstadoImp = null;
        private static List<TD_ORG_VTA> ListarOrgVta = null;
        private static String strMsg, strIngreso = String.Empty;
        private clsTD_MaterialLogic cls_materialLogic = null;
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                if (!IsPostBack)
                {

                    listarEstado();
                    ListaOrganizacionVenta();

                    cboAnio.Value = DateTime.Now.AddMonths(-6).Year ;
                    cboAnioFinal.Value = DateTime.Now.AddDays(-30).Year + 1;
                    cboExtado.Value = "T";
                    cboOrgaVEnta.Value = "2";
                    obtenerDatosFiltros(2);
                    strIngreso = "1";
                    cargarMaestro();

                    Panel img = (Panel)Master.FindControl("asp");
                    img.Visible = false;

                    if (Session["dgImportacionCabColumnOrder"] != null)
                    {
                        String strColumnOrder, strColumnOrderType;

                        strColumnOrder = Session["dgImportacionCabColumnOrder"].ToString();
                        strColumnOrderType = Session["dgImportacionCabSortOrderType"].ToString();
                        DevExpress.Web.ASPxGridView.GridViewDataColumn gvdcColumnOrder = new DevExpress.Web.ASPxGridView.GridViewDataColumn();
                        gvdcColumnOrder = (DevExpress.Web.ASPxGridView.GridViewDataColumn)dgImportacionCab.Columns[strColumnOrder];

                        int intColumnOrderType = -1;

                        if (strColumnOrderType == "Ascending")
                        {
                            intColumnOrderType = 0;
                            gvdcColumnOrder.SortOrder = DevExpress.Data.ColumnSortOrder.Ascending;
                        }
                        else if (strColumnOrderType == "Descending")
                        {
                            intColumnOrderType = 1;
                            gvdcColumnOrder.SortOrder = DevExpress.Data.ColumnSortOrder.Descending;
                        }
                        else if (strColumnOrderType == "None")
                        {
                            intColumnOrderType = -1;
                            gvdcColumnOrder.SortOrder = DevExpress.Data.ColumnSortOrder.None;
                        }
                        //dgImportacionCab.SortBy(gvdcColumnOrder, gvdcColumnOrder.SortOrder);
                        dgImportacionCab.SortBy(gvdcColumnOrder, intColumnOrderType);
                    }

                }
            }
            catch (Crosland.Automotriz.Logic.ControlExeption.DataException ex)
            {
                GuardarExceptionLog(ex.Message, ex, "Page_Load");
                MensajesError(ex.Message, ex, "Page_Load");
            }
            catch (RunException exc)
            {
                GuardarExceptionLog(exc.Message, exc, "Page_Load");
                MensajesError(exc.Message, exc, "Page_Load");
            }
        }

        private void cargarMaestro()
        {
            try
            {
                int? intAnio0 = null, intidOrg0 = null;
                int? intAnioFin = null;
                String strIndicador = String.Empty;

                if (strIngreso != "1")
                {
                    intAnio0 = (cboAnio.Value != null) ? Convert.ToInt32(cboAnio.SelectedItem.Value) : intAnio0;
                    intAnioFin = (cboAnioFinal.Value != null) ? Convert.ToInt32(cboAnioFinal.SelectedItem.Value) : intAnioFin;
                    intidOrg0 = (cboOrgaVEnta.Value != null) ? Convert.ToInt32(cboOrgaVEnta.SelectedItem.Value) : intidOrg0;
                    strIndicador = cboExtado.SelectedItem.Value.ToString();
                }
                else if (strIngreso == "1")
                {
                    intAnio0 = (cboAnio.Value != null) ? Convert.ToInt32(cboAnio.Value) : intAnio0;
                    intAnioFin = (cboAnioFinal.Value != null) ? Convert.ToInt32(cboAnioFinal.Value) : intAnioFin;
                    intidOrg0 = (cboOrgaVEnta.Value != null) ? Convert.ToInt32(cboOrgaVEnta.Value) : intidOrg0;
                    strIndicador = cboExtado.Value.ToString();
                    strIngreso = String.Empty;
                }

                if (intAnio0 == null || intidOrg0 == null || intAnioFin == null)
                {
                    strMsg = "Debe Seleccionar el Año inicio,anio final y La Organizacion.";
                    MostrarComentario(strMsg);
                    return;
                }

                int intAnio = Convert.ToInt32(intAnio0);
                int intIdOrg = Convert.ToInt32(intidOrg0);
                int intAnioFinal = Convert.ToInt32(intAnioFin);

                lista = new List<Object>();
                Importacion = new clsImportacionesLogic();
                lista = Importacion.ImportacionCAB(intAnio, intAnioFinal, strIndicador, intIdOrg);

                if (lista == null)
                {
                    strMsg = "No Hay Datos Para El Maestro de Importaciones.";
                    MostrarComentario(strMsg);
                    return;
                }

                dgImportacionCab.DataSource = lista;
                dgImportacionCab.DataBind();



                if (Session["indexFocus"] != null)
                {
                    dgImportacionCab.FocusedRowIndex = Convert.ToInt32(Session["indexFocus"]);
                }


            }
            catch (Crosland.Automotriz.Logic.ControlExeption.DataException ex)
            {
                GuardarExceptionLog(ex.Message, ex, "cargarMaestro");
                MensajesError(ex.Message, ex, "cargarMaestro");
            }
            catch (RunException exc)
            {
                GuardarExceptionLog(exc.Message, exc, "cargarMaestro");
                MensajesError(exc.Message, exc, "cargarMaestro");
            }

        }

        private void listarEstado()
        {
            try
            {
                ListarEstadoImp = new List<Object>();
                logimportacion = new FacadePronosticoImportacion();
                ListarEstadoImp = logimportacion.listarLog_Imp_Mae_Estado();

                if (ListarEstadoImp == null || ListarEstadoImp.Count() == 0)
                {
                    strMsg = "No Hay Datos Para El Estado.";
                    MostrarComentario(strMsg);
                    return;
                }

                cboExtado.DataSource = ListarEstadoImp;
                cboExtado.TextField = "DES_IMP_SUP";
                cboExtado.ValueField = "IND_TRANSITO";
                cboExtado.DataBind();

            }
            catch (Crosland.Automotriz.Logic.ControlExeption.DataException ex)
            {
                GuardarExceptionLog(ex.Message, ex, "listarEstado");
                MensajesError(ex.Message, ex, "listarEstado");
            }
            catch (RunException e)
            {
                GuardarExceptionLog(e.Message, e, "listarEstado");
                MensajesError(e.Message, e, "listarEstado");
            }

        }

        private void obtenerDatosFiltros(int? intTipo)
        {
            try
            {
                String strOrgVta, strAnio, strExtado;
                if (intTipo == 1)
                {
                    strOrgVta = cboOrgaVEnta.Value.ToString().Trim();
                    strAnio = cboAnio.Value.ToString().Trim();
                    strExtado = cboExtado.Value.ToString().Trim();

                    Session["strOrgVta"] = strOrgVta;
                    Session["strAnio"] = strAnio;
                    Session["strExtado"] = strExtado;
                }
                else if (intTipo == 2)
                {
                    strOrgVta = (Session["strOrgVta"] != null) ? Session["strOrgVta"].ToString().Trim() : String.Empty;
                    strAnio = (Session["strAnio"] != null) ? Session["strAnio"].ToString().Trim() : String.Empty;
                    strExtado = (Session["strExtado"] != null) ? Session["strExtado"].ToString().Trim() : String.Empty;

                    if (strOrgVta != String.Empty) cboOrgaVEnta.Value = strOrgVta;
                    if (strAnio != String.Empty) cboAnio.Value = strAnio;
                    if (strExtado != String.Empty) cboExtado.Value = strExtado;
                }
            }
            catch (Crosland.Automotriz.Logic.ControlExeption.DataException ex)
            {
                GuardarExceptionLog(ex.Message, ex, "obtenerDatosFiltros");
                MensajesError(ex.Message, ex, "obtenerDatosFiltros");
            }
            catch (RunException e)
            {
                GuardarExceptionLog(e.Message, e, "obtenerDatosFiltros");
                MensajesError(e.Message, e, "obtenerDatosFiltros");
            }
        }

        protected void cmdNuevo_Click(object sender, EventArgs e)
        {
            try
            {
                Session["operacon"] = "0";
                Session["obtenerDatos"] = "0";
                Session["ID_ORG_VTA"] = cboOrgaVEnta.Value;
                Session["DES_ORG_VTA"] = cboOrgaVEnta.Text;
                Session["listaCargaManual"] = null;
                Session["strAgregado"] = "0";
                Session["strAgregarDoc"] = "0";
                Session["listaCargaDoc"] = null;
                Session["strGrabDoc"] = "0";
                Session["TIPO_PEDIDO_VALUE"] = null;
                Session["ID_IMP_IMPORTACION_CAB"] = 0;
                obtenerDatosFiltros(1);
                Response.Redirect("~/Repuestos/wFrmSeguimientoImportacionGenerar.aspx?id=" + idNegocio, false);
                return;
            }
            catch (Crosland.Automotriz.Logic.ControlExeption.DataException ex)
            {
                GuardarExceptionLog(ex.Message, ex, "cmdNuevo_Click");
                MensajesError(ex.Message, ex, "cmdNuevo_Click");
            }
            catch (RunException exc)
            {
                GuardarExceptionLog(exc.Message, exc, "cmdNuevo_Click");
                MensajesError(exc.Message, exc, "cmdNuevo_Click");
            }
        }

        protected void cmdMostrar_Click(object sender, EventArgs e)
        {
            try
            {
                cargarMaestro();
                dgImportacionCab.FocusedRowIndex = -1;
                if (dgImportacionCab.VisibleRowCount == 0)
                {
                    dgImportacionDet.DataSource = null;
                    dgImportacionDet.DataBind();
                }
                if (Session["dgImportacionCabColumnOrder"] != null)
                {
                    String strColumnOrder = Session["dgImportacionCabColumnOrder"].ToString();
                    DevExpress.Web.ASPxGridView.GridViewDataColumn col = new DevExpress.Web.ASPxGridView.GridViewDataColumn();
                    col = (DevExpress.Web.ASPxGridView.GridViewDataColumn)dgImportacionCab.Columns[strColumnOrder];
                    col.SortOrder = DevExpress.Data.ColumnSortOrder.None;
                    dgImportacionCab.SortBy(col, -1);
                    Session["dgImportacionCabColumnOrder"] = null;
                }
            }
            catch (Crosland.Automotriz.Logic.ControlExeption.DataException ex)
            {
                GuardarExceptionLog(ex.Message, ex, "cmdMostrar_Click");
                MensajesError(ex.Message, ex, "cmdMostrar_Click");
            }
            catch (RunException exc)
            {
                GuardarExceptionLog(exc.Message, exc, "cmdMostrar_Click");
                MensajesError(exc.Message, exc, "cmdMostrar_Click");
            }
        }

        protected void dgImportacionDet_PageIndexChanged(object sender, EventArgs e)
        {

            try
            {
                int id_imp_cab = Convert.ToInt32(dgImportacionCab.GetRowValues(dgImportacionCab.FocusedRowIndex, "ID_IMP_IMPORTACION_CAB"));
                if (id_imp_cab == 0)
                {
                    strMsg = "No Hay Existe Un Numero de Pedido Seleccionado";
                    MostrarComentario(strMsg);
                    return;
                }

                lista = new List<Object>();
                Importacion = new clsImportacionesLogic();
                lista = Importacion.ImportacionDET(id_imp_cab);

                if (lista == null)
                {
                    strMsg = "No Hay Detalles Para La Importacion Seleccionada";
                    MostrarComentario(strMsg);
                    return;
                }

                dgImportacionDet.DataSource = lista;
                dgImportacionDet.PageIndex = 0;
                dgImportacionDet.DataBind();

            }
            catch (Crosland.Automotriz.Logic.ControlExeption.DataException ex)
            {
                GuardarExceptionLog(ex.Message, ex, "dgImportacionDet_PageIndexChanged");
                MensajesError(ex.Message, ex, "dgImportacionDet_PageIndexChanged");
            }
            catch (RunException exc)
            {
                GuardarExceptionLog(exc.Message, exc, "dgImportacionDet_PageIndexChanged");
                MensajesError(exc.Message, exc, "dgImportacionDet_PageIndexChanged");
            }
        }

        protected void cmdSalir_Click(object sender, EventArgs e)
        {
            Session["strOrgVta"] = null;
            Session["strAnio"] = null;
            Session["strExtado"] = null;
            Response.Redirect("~/Seguridad/wFrmDefault.aspx?id=" + idNegocio);
        }

        protected void btnPopAceptar_Click(object sender, EventArgs e)
        {
            try
            {
                if (Convert.ToString(dgImportacionCab.GetRowValues(dgImportacionCab.FocusedRowIndex, "Estado")).ToLower() == "anulado")
                {
                    lblmsj.Text = "El pedido ya está anulado ";
                    PopupMensaheGeneral.ShowOnPageLoad = true;
                }
                else
                {
                    clsImportacionesLogic impcab_BL = new clsImportacionesLogic();
                    if (impcab_BL.Anular_importacion((int)dgImportacionCab.GetRowValues(dgImportacionCab.FocusedRowIndex, "ID_IMP_IMPORTACION_CAB")))
                    {
                        cargarMaestro();
                        lblmsj.Text = "Se anuló de forma satisfactoria ";
                        PopupMensaheGeneral.ShowOnPageLoad = true;

                    }
                    else
                    {
                        lblmsj.Text = "Error al anular ";
                        PopupMensaheGeneral.ShowOnPageLoad = true;
                    }
                }
            }
            catch (Crosland.Automotriz.Logic.ControlExeption.DataException ex)
            {
                GuardarExceptionLog(ex.Message, ex, "btnPopAceptar_Click");
                MensajesError(ex.Message, ex, "btnPopAceptar_Click");
            }
            catch (RunException exc)
            {
                GuardarExceptionLog(exc.Message, exc, "btnPopAceptar_Click");
                MensajesError(exc.Message, exc, "btnPopAceptar_Click");
            }
        }

        protected void btnconsultar_Click(object sender, EventArgs e)
        {
            try
            {
                Session["num_pedido"] = dgImportacionCab.GetRowValues(dgImportacionCab.FocusedRowIndex, "NUM_PEDIDO_ORIG").ToString().Trim();
                Session["pedido1"] = cboPedido1.Value.ToString().Trim();
                Session["pedido2"] = cboPedido2.Value.ToString().Trim();

                string script = "url();";
                ScriptManager.RegisterStartupScript(this, typeof(Page), "popup", script, true);
            }
            catch (Crosland.Automotriz.Logic.ControlExeption.DataException ex)
            {
                GuardarExceptionLog(ex.Message, ex, "btnconsultar_Click");
                MensajesError(ex.Message, ex, "btnconsultar_Click");
            }
            catch (RunException exc)
            {
                GuardarExceptionLog(exc.Message, exc, "btnconsultar_Click");
                MensajesError(exc.Message, exc, "btnconsultar_Click");
            }
        }

        private void enviarDtsModifica()
        {
            int intIndex = dgImportacionCab.FocusedRowIndex;

            String strNumPedido = (dgImportacionCab.GetRowValues(intIndex, "NUM_PEDIDO") != null) ? dgImportacionCab.GetRowValues(intIndex, "NUM_PEDIDO").ToString() : String.Empty;
            //*****************
            String IdImpCab = dgImportacionCab.GetRowValues(intIndex, "ID_IMP_IMPORTACION_CAB").ToString();
            //*****************
            if (strNumPedido == "")
            {
                strMsg = "Debe Seleccionar Una Importacion En La Página Actual.";
                MostrarComentario(strMsg);
                cargarMaestro();
                return;
            }

            Session["indexFocus"] = Convert.ToInt32(dgImportacionCab.FocusedRowIndex);
            Session["operacon"] = "1";
            Session["obtenerDatos"] = "0";
            Session["ID_ORG_VTA"] = cboOrgaVEnta.Value;
            Session["DES_ORG_VTA"] = cboOrgaVEnta.Text;
            Session["strAgregado"] = "0";
            Session["listaCargaManual"] = null;
            Session["strAgregarDoc"] = "0";
            Session["listaCargaDoc"] = null;
            Session["strGrabDoc"] = "0";
            Session["TIPO_PEDIDO_VALUE"] = null;
            Session["NUM_PEDIDO"] = strNumPedido;
            //***************
            Session["ID_IMP_IMPORTACION_CAB"] = IdImpCab;
            //***************
            obtenerDatosFiltros(1);
            Response.Redirect("~/Repuestos/wFrmSeguimientoImportacionGenerar.aspx?id=" + idNegocio);


        }

        protected void cmdModificar_Click(object sender, EventArgs e)
        {
            if (dgImportacionCab.FocusedRowIndex == -1)
            {
                strMsg = "Debe Seleccionar Una Importacion.";
                MostrarComentario(strMsg);
                return;
            }

            enviarDtsModifica();

        }

        protected void dgImportacionCab_PageIndexChanged(object sender, EventArgs e)
        {
            cargarMaestro();
        }

        private void cargarDetalle()
        {
            try
            {
                int id_imp_cab = Convert.ToInt32(dgImportacionCab.GetRowValues(dgImportacionCab.FocusedRowIndex, "ID_IMP_IMPORTACION_CAB"));
                if (id_imp_cab == 0)
                {
                    strMsg = "No Hay Ningun Numero de Pedido Seleccionado.";
                    MostrarComentario(strMsg);
                    return;
                }

                lista = new List<Object>();
                Importacion = new clsImportacionesLogic();
                lista = Importacion.ImportacionDET(id_imp_cab);

                if (lista == null)
                {
                    strMsg = "No Hay Detalles Para La Importacion Seleccionada";
                    MostrarComentario(strMsg);
                    return;
                }

                dgImportacionDet.DataSource = lista;
                dgImportacionDet.DataBind();
            }
            catch (Crosland.Automotriz.Logic.ControlExeption.DataException ex)
            {
                GuardarExceptionLog(ex.Message, ex, "cargarDetalle");
                MensajesError(ex.Message, ex, "cargarDetalle");
            }
            catch (RunException exc)
            {
                GuardarExceptionLog(exc.Message, exc, "cargarDetalle");
                MensajesError(exc.Message, exc, "cargarDetalle");
            }
        }

        protected void dgImportacionDet_AfterPerformCallback(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewAfterPerformCallbackEventArgs e)
        {
            cargarDetalle();
        }

        protected void dgImportacionCab_AfterPerformCallback(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewAfterPerformCallbackEventArgs e)
        {
            cargarMaestro();
        }

        private void ListaOrganizacionVenta()
        {
            try
            {
                ListarOrgVta = new List<TD_ORG_VTA>();
                clsTd_Org_VtaLogic l = new clsTd_Org_VtaLogic();
                ListarOrgVta = l.lista();

                if (ListarOrgVta == null || ListarOrgVta.Count() == 0)
                {
                    strMsg = "No Hay Datos Para Las Organizaciones.";
                    MostrarComentario(strMsg);
                    return;
                }

                cboOrgaVEnta.DataSource = ListarOrgVta;
                cboOrgaVEnta.TextField = "DES_ORG_VTA";
                cboOrgaVEnta.ValueField = "ID_ORG_VTA";
                cboOrgaVEnta.DataBind();

                //lista combo popup generar back order

                pCboOrganizacionVenta.DataSource = ListarOrgVta;
                pCboOrganizacionVenta.TextField = "DES_ORG_VTA";
                pCboOrganizacionVenta.ValueField = "ID_ORG_VTA";
                pCboOrganizacionVenta.DataBind();



            }
            catch (Crosland.Automotriz.Logic.ControlExeption.DataException ex)
            {
                GuardarExceptionLog(ex.Message, ex, "ListaOrganizacionVenta");
                MensajesError(ex.Message, ex, "ListaOrganizacionVenta");
            }
            catch (RunException exc)
            {
                GuardarExceptionLog(exc.Message, exc, "ListaOrganizacionVenta");
                MensajesError(exc.Message, exc, "ListaOrganizacionVenta");
            }
        }

        protected void btnDetalle_Click(object sender, EventArgs e)
        {
            try
            {
                cargarDetalle();
                String strNumPedido = dgImportacionCab.GetRowValues(dgImportacionCab.FocusedRowIndex, "NUM_PEDIDO").ToString().Trim();
                popupDetalle.HeaderText = "Detalle de la Importación N° " + strNumPedido;
                popupDetalle.ShowOnPageLoad = true;
            }
            catch (Crosland.Automotriz.Logic.ControlExeption.DataException ex)
            {
                GuardarExceptionLog(ex.Message, ex, "btnDetalle_Click");
                MensajesError(ex.Message, ex, "btnDetalle_Click");
            }
            catch (RunException exc)
            {
                GuardarExceptionLog(exc.Message, exc, "btnDetalle_Click");
                MensajesError(exc.Message, exc, "btnDetalle_Click");
            }
        }

        private void MostrarComentario(String strMsg)
        {
            CargarAlert(strMsg, "Mensaje");
        }

        private void MostrarComentario(String strMsg, String strTitulo)
        {
            CargarAlert(strMsg, strTitulo);
        }

        private void CargarAlert(String strMsg, String strTitulo)
        {
            PopupMensaheGeneral.HeaderText = strTitulo;
            lblmsj.Text = strMsg;
            PopupMensaheGeneral.ShowOnPageLoad = true;
        }

        protected void btnAnalizar_Click(object sender, EventArgs e)
        {
            ListaTipoPedido();
            AnalizarImp();
        }

        private void AnalizarImp()
        {
            try
            {
                int intIndex = dgImportacionCab.FocusedRowIndex;
                if (intIndex == -1)
                {
                    strMsg = "Debe seleccionar una importacion.";
                    MostrarComentario(strMsg);
                    return;
                }

                String strNumPedido = dgImportacionCab.GetRowValues(intIndex, "NUM_PEDIDO_ORIG").ToString().Trim();
                String strIdOrgVta = dgImportacionCab.GetRowValues(intIndex, "ID_ORG_VTA").ToString().Trim();

                Session["strIdOrgVta"] = strIdOrgVta;

                nroPedido.Text = strNumPedido;
                PopupReporte.ShowOnPageLoad = true;
            }
            catch (Crosland.Automotriz.Logic.ControlExeption.DataException ex)
            {
                GuardarExceptionLog(ex.Message, ex, "AnalizarImp");
                MensajesError(ex.Message, ex, "AnalizarImp");
            }
            catch (RunException exc)
            {
                GuardarExceptionLog(exc.Message, exc, "AnalizarImp");
                MensajesError(exc.Message, exc, "AnalizarImp");
            }
        }

        protected void dgImportacionCab_CustomColumnSort(object sender, DevExpress.Web.ASPxGridView.CustomColumnSortEventArgs e)
        {
            try
            {
                Session["dgImportacionCabColumnOrder"] = e.Column.FieldName;
                Session["dgImportacionCabSortOrderType"] = e.Column.SortOrder;
            }
            catch (Crosland.Automotriz.Logic.ControlExeption.DataException ex)
            {
                GuardarExceptionLog(ex.Message, ex, "dgImportacionCab_CustomColumnSort");
                MensajesError(ex.Message, ex, "dgImportacionCab_CustomColumnSort");
            }
            catch (RunException exc)
            {
                GuardarExceptionLog(exc.Message, exc, "dgImportacionCab_CustomColumnSort");
                MensajesError(exc.Message, exc, "dgImportacionCab_CustomColumnSort");
            }
        }

        protected void btnExportar_Click(object sender, EventArgs e)
        {
            BuscarImp();
            ASPxGridViewExporter1.WriteXlsxToResponse();
        }

        protected void BuscarImp()
        {
            try
            {
                cargarMaestro();
                dgImportacionCab.FocusedRowIndex = -1;
                if (dgImportacionCab.VisibleRowCount == 0)
                {
                    dgImportacionDet.DataSource = null;
                    dgImportacionDet.DataBind();
                }
                if (Session["dgImportacionCabColumnOrder"] != null)
                {
                    String strColumnOrder = Session["dgImportacionCabColumnOrder"].ToString();
                    DevExpress.Web.ASPxGridView.GridViewDataColumn col = new DevExpress.Web.ASPxGridView.GridViewDataColumn();
                    col = (DevExpress.Web.ASPxGridView.GridViewDataColumn)dgImportacionCab.Columns[strColumnOrder];
                    col.SortOrder = DevExpress.Data.ColumnSortOrder.None;
                    dgImportacionCab.SortBy(col, -1);
                    Session["dgImportacionCabColumnOrder"] = null;
                }
            }
            catch (Crosland.Automotriz.Logic.ControlExeption.DataException ex)
            {
                GuardarExceptionLog(ex.Message, ex, "BuscarImp");
                MensajesError(ex.Message, ex, "BuscarImp");
            }
            catch (RunException exc)
            {
                GuardarExceptionLog(exc.Message, exc, "BuscarImp");
                MensajesError(exc.Message, exc, "BuscarImp");
            }
        }

        private static decimal dbltotal = 0;
        private void ListaBackOrderDet(int org_vta, String num_pedido)
        {

            clsT_Imp_Importacion_Back_OrderLogic l = new clsT_Imp_Importacion_Back_OrderLogic();

           IEnumerable<Object> lista = l.ListBackOrder(org_vta, num_pedido);
            if (lista.Count() == 0 || lista == null) {

                grdBackOrder.DataSource = null;
                grdBackOrder.DataBind();
                pBtnGrabar.ClientEnabled = false;
                strMsg = "No hay información completa para mostrar el detalle ";
                MostrarComentario(strMsg);
                return;
            }

             dbltotal = l.TotalBackOrder(org_vta, num_pedido);
            pBtnGrabar.ClientEnabled = true;
            grdBackOrder.DataSource = lista;
            grdBackOrder.DataBind();

        }


        private void ListaBackOrderCab()
        {
            try
            {
                clsT_Imp_Importacion_Back_OrderLogic l = new clsT_Imp_Importacion_Back_OrderLogic();
                List<T_IMP_IMPORTACION_BACK_ORDER_CAB> listK = l.ListaCab(Convert.ToInt32(cboOrgaVEnta.Value), Convert.ToInt32(dgImportacionCab.GetRowValues(dgImportacionCab.FocusedRowIndex, "ID_IMP_IMPORTACION_CAB")));

                if (listK != null || listK.Count()!=0)
                {
                    pCboOrganizacionVenta.Value = listK[0].ID_ORG_VTA.ToString();
                    pTxtNumPEdidoOrig.Text = listK[0].NUM_PEDIDO_ORIG;
                    pdteFechaPedido.Value = listK[0].FEC_PEDIDO;
                    pdteFechaEmbEst.Value = listK[0].FEC_EMBARQUE_EST;
                    pdteFechaLLegPuertoEst.Value = listK[0].FEC_LLEG_EST_PUERTO;
                    pdtFechaAlmacen.Value = listK[0].FEC_LLEG_ALMACEN;
                    pdtFechaEmbarque.Value = listK[0].FEC_EMBARQUE;
                    pdtFechaLLegaPuerto.Value = listK[0].FEC_LLEG_PUERTO;
                    pTxtIdProveedor.Text = Convert.ToString(listK[0].ID_PROVEEDOR);
                    pTxtProveedor.Text = listK[0].NOM_PROVEEDOR;
                    pTxtTipoTransporte.Text = listK[0].TIPO_TRANSPORTE;
                    pTxtIdTipoTransporte.Text = Convert.ToString(listK[0].ID_TIPO_TRANSPORTE);
                    pTxtNroPedido.Text = listK[0].NUM_PEDIDO_ORIG;
                    Session["snum_pedido"] = listK[0].NUM_PEDIDO_ORIG;
                    this.ListaBackOrderDet(Convert.ToInt32(pCboOrganizacionVenta.Value), pTxtNumPEdidoOrig.Text);
                    return;
                }
                strMsg = "No hay datos del nro.pedido a mostrar";
                MostrarComentario(strMsg);
                return;
            }
            catch (Crosland.Automotriz.Logic.ControlExeption.DataException ex)
            {
                GuardarExceptionLog(ex.Message, ex, "ListaBackOrderCab");
                MensajesError(ex.Message, ex, "ListaBackOrderCab");
            }
            catch (RunException ex)
            {
                GuardarExceptionLog(ex.Message, ex, "ListaBackOrderCab");
                MensajesError(ex.Message, ex, "ListaBackOrderCab");
            }
            catch (Exception ex)
            {

                GuardarExceptionLog("Error no controlado", ex, "ListaBackOrderCab");
                MensajesError("Error no controlado", ex, "ListaBackOrderCab");
            }
        }


        protected void btnGenerarBackOrder_Click(object sender, EventArgs e)
        {
            if (dgImportacionCab.FocusedRowIndex == -1) {
                lblmsj.Text = "Seleccione un registro por favor";
                PopupMensaheGeneral.ShowOnPageLoad = true;
                return;
            }

            this.ListaBackOrderCab();
            PopupBackOrder.ShowOnPageLoad = true;
        }


        private void MensajesError(String msgUsu, Exception ex, String metError)
        {
            Crosland.Automotriz.Web.UserControl.MensajeError uc = (Crosland.Automotriz.Web.UserControl.MensajeError)Master.FindControl("ucErrorMensaje");
            String msgReal, fhError, pagError, codUsu;
            msgReal = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message;
            pagError = new System.IO.FileInfo(Page.Request.Url.AbsolutePath).Name;
            codUsu = Session["User"].ToString();
            fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
            System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(ex, true);
            int number = 0;
            for (int i = 0; i < trace.FrameCount; i++)
            {
                System.Diagnostics.StackFrame sf = trace.GetFrame(i);
                number = sf.GetFileLineNumber();
            }
            uc.Errores(msgUsu, msgReal, fhError, pagError, metError, codUsu, number);
        }

        private void GuardarExceptionLog(String msgUsu, Exception ex, String metError)
        {
            try
            {
                String msgReal, fhError, pagError, codUsu;
                msgReal = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message;
                pagError = new System.IO.FileInfo(Page.Request.Url.AbsolutePath).Name;
                codUsu = Session["User"].ToString();
                fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");

                System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(ex, true);
                int number = 0;
                for (int i = 0; i < trace.FrameCount; i++)
                {
                    System.Diagnostics.StackFrame sf = trace.GetFrame(i);
                    number = sf.GetFileLineNumber();
                }
                fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
                new Logg().ErrorLog(Server.MapPath("~/Logs/ErrorLog.csv"), msgUsu, msgReal, pagError, metError, codUsu, number);
            }
            catch (Crosland.Automotriz.Logic.ControlExeption.DataException e)
            {

                MensajesError(e.Message, e, "GuardarExceptionLog");
            }
            catch (RunException re)
            {
                MensajesError(re.Message, re, "GuardarExceptionLog");
            }

        }

        protected void pBtnGrabar_Click(object sender, EventArgs e)
        {
            this.Grabar();
        }

        protected void grdBackOrder_AfterPerformCallback(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewAfterPerformCallbackEventArgs e)
        {
            this.ListaBackOrderCab();
        }




        private bool Validacion() {

            int intLenNumPedido= pTxtNumPEdidoOrig.Text.Length;
            if (pTxtNroPedido.Text.Length < intLenNumPedido) {
                return false;
            }
            String num_pedido = LeftRightMid.Left(pTxtNroPedido.Text, intLenNumPedido);

            if (num_pedido==pTxtNumPEdidoOrig.Text)
            {

                return true;
            }
            else {

                return false;
            }

        }


        private void Grabar()
        {
            clsT_Imp_Importacion_Back_OrderLogic l = new clsT_Imp_Importacion_Back_OrderLogic();
           clsImportacionesLogic ImportacionBL = new clsImportacionesLogic();
            try
            {


                if (Validacion()==false)
                {
                    lblmsj.Text = "El Nro.Pedido debe contener los primeros letras del Nro.Pedido Orig.";
                    PopupMensaheGeneral.ShowOnPageLoad = true;
                    return;
                }

                if (l.VerificaExistenciaNumeroPedido(pTxtNroPedido.Text)>0) {
                    lblmsj.Text = "El Nro.Pedido ya existe ingrese otro por favor ";
                    PopupMensaheGeneral.ShowOnPageLoad = true;
                    return;
                
                }





           

                if (dbltotal <= 0)
                {
                               
                    strMsg = "No se puede grabar por que el Total y/o cantidad es  Menor o Igual que 0 ";
                    MostrarComentario(strMsg);
                    return;

                }



                Boolean boolGrabarImportacion = false;      
                List<IMPORTACION_CAB> listaCab = ImportacionBL.listarCab(Convert.ToInt32(dgImportacionCab.GetRowValues(dgImportacionCab.FocusedRowIndex, "ID_IMP_IMPORTACION_CAB")));
                T_IMP_IMPORTACION_CAB impcab_ent = new T_IMP_IMPORTACION_CAB();
                List<T_IMP_IMPORTACION_DET> impdet_ent = new List<T_IMP_IMPORTACION_DET>();
                List<T_IMP_IMPORTACIONES_DOC_RELACIONADOS> impdoc_ent = new List<T_IMP_IMPORTACIONES_DOC_RELACIONADOS>();
                Nullable<DateTime> dtpFechaPed_null = null;
                Nullable<DateTime> dtFecha_Embarque_Est_null = null;
                Nullable<DateTime> dtpFechaEmbarque_null = null;
                Nullable<DateTime> dtFec_LLeg_Puerto_null = null;
                  Nullable<DateTime> dtFec_LLeg_Puerto_est_null = null;
                //Nullable<DateTime> dtpFechaLlegadaEst_null = null;
                Nullable<DateTime> dtFec_lleg_Almacen_null = null;
                impcab_ent.ID_ORG_VTA = listaCab[0].ID_ORG_VTA;
                impcab_ent.NUM_PEDIDO = pTxtNroPedido.Text;
                impcab_ent.ID_OFI_VTA = listaCab[0].ID_OFI_VTA;
                impcab_ent.FEC_PEDIDO = (pdteFechaPedido.Text != "") ? pdteFechaPedido.Date : dtpFechaPed_null;
                impcab_ent.FEC_EMBARQUE_EST = (pdteFechaEmbEst.Text != "") ? pdteFechaEmbEst.Date : dtFecha_Embarque_Est_null;
                impcab_ent.FEC_EMBARQUE = pdtFechaEmbarque.Text != "" ? pdtFechaEmbarque.Date : dtpFechaEmbarque_null;
                impcab_ent.FEC_LLEG_PUERTO = pdtFechaLLegaPuerto.Text != "" ? pdtFechaLLegaPuerto.Date : dtFec_LLeg_Puerto_null;
                impcab_ent.FEC_LLEG_EST_PUERTO = (pdteFechaLLegPuertoEst.Text != "" )? pdteFechaLLegPuertoEst.Date : dtFec_LLeg_Puerto_est_null.Value;
                impcab_ent.FEC_LLEG_ALMACEN = (pdtFechaAlmacen.Text != "") ? pdtFechaAlmacen.Date : dtFec_lleg_Almacen_null;
                impcab_ent.COD_IMP_ESTADO = "03";
                impcab_ent.COD_VIA_TRANSPORTE = "01";
                impcab_ent.OBSERVACION = listaCab[0].OBSERVACION;
                impcab_ent.ID_PROVEEDOR = listaCab[0].ID_PROVEEDOR;
                impcab_ent.FACTOR_IMP = (decimal)0.0;
                impcab_ent.NRO_POLIZA = "";
                impcab_ent.NRO_TITULO = "";
                impcab_ent.FEC_TITULO = DateTime.Now;
                impcab_ent.FEC_POLIZA = DateTime.Now;
                impcab_ent.IND_SKD = 2;
                impcab_ent.ID_TIPO_TRANSPORTE = listaCab[0].ID_TIPO_TRANSPORTE;
                impcab_ent.NUM_PEDIDO_ORIG = listaCab[0].NUM_PEDIDO_ORIG;
                impcab_ent.CANT_CONTENEDOR_20_PIES = listaCab[0].CANT_CONTENEDOR_20_PIES.Value;
                impcab_ent.CANT_CONTENEDOR_40_PIES = listaCab[0].CANT_CONTENEDOR_40_PIES.Value;
                int intItemPedido = 0, intIdMaterial = 0, intIdimpCAB=0;
                String strCodMaterial, strDesMaterial;
                intIdimpCAB = ImportacionBL.UltimoPedidoGenerado() + 1;
                while (intItemPedido <= grdBackOrder.VisibleRowCount - 1)
                {
                    try
                    {
                        T_IMP_IMPORTACION_DET objImpDet = new T_IMP_IMPORTACION_DET();
                        cls_materialLogic = new clsTD_MaterialLogic();

                        strCodMaterial = grdBackOrder.GetRowValues(intItemPedido, "COD_MATERIAL").ToString();
                        intIdMaterial = cls_materialLogic.RetorIDMaterial(strCodMaterial);
                        strDesMaterial = grdBackOrder.GetRowValues(intItemPedido, "DES_MATERIAL_IMP").ToString();
                        intIdMaterial = cls_materialLogic.RetorIDMaterial(strCodMaterial);
                        objImpDet.ID_ORG_VTA = listaCab[0].ID_ORG_VTA;
                        objImpDet.NUM_PEDIDO = pTxtNroPedido.Text;
                        objImpDet.ID_IMP_IMPORTACION_CAB = intIdimpCAB;
                        objImpDet.COD_TIPO_PEDIDO = "PAC";
                        objImpDet.NUM_ITEM_PED = intItemPedido;
                        objImpDet.ID_MATERIAL = intIdMaterial;
                        objImpDet.COD_MATERIAL = strCodMaterial;
                        objImpDet.DES_MATERIAL_IMP = strDesMaterial;
                        objImpDet.CAJA = "";
                        objImpDet.CANT_IMP = Convert.ToDecimal(grdBackOrder.GetRowValues(intItemPedido, "CANTIDAD"));
                        objImpDet.FOB_ME = Convert.ToDecimal(grdBackOrder.GetRowValues(intItemPedido, "FOB_ME"));
                        objImpDet.ID_PRONOSTICO_TIPO = 58;
                        objImpDet.TOTAL_FOB_ME = Convert.ToDecimal(grdBackOrder.GetRowValues(intItemPedido, "TOTAL_FOB_ME"));
                        objImpDet.ID_COLOR = 1;
                        impdet_ent.Add(objImpDet);
                        intItemPedido++;
                    }
                    catch (Exception ex)
                    {
                        throw ex;
                    }
                }

                boolGrabarImportacion = ImportacionBL.InsertarBackOrder(impcab_ent, impdet_ent);
                if (boolGrabarImportacion)
                {
                    cargarMaestro();
                    PopupBackOrder.ShowOnPageLoad = false;
                    lblmsj.Text = "Se grabó correctamente!";
                    PopupMensaheGeneral.ShowOnPageLoad = true;
                }
                else
                {
                    lblmsj.Text = "Error en grabar por favor verificar";
                    PopupMensaheGeneral.ShowOnPageLoad = true;

                }
            }
            catch (Automotriz.Logic.ControlExeption.DataException ex)
            {
                GuardarExceptionLog(ex.Message, ex, "Grabar");
                MensajesError(ex.Message, ex, "Grabar");
               
            }catch(Automotriz.Logic.ControlExeption.RunException ex){

                GuardarExceptionLog(ex.Message, ex, "Grabar");
                MensajesError(ex.Message, ex, "Grabar");
            }

        }




        private void ListaTipoPedido() {

            try
            {
                clsLog_Tipo_PedidoLogic l = new clsLog_Tipo_PedidoLogic();
                IEnumerable<Object> lista = l.listar();
                cboPedido1.DataSource = lista;
                cboPedido1.TextField = "DES_TIPO_PEDIDO";
                cboPedido1.ValueField = "TIPO_PEDIDO";
                cboPedido1.DataBind();
                cboPedido1.Value = "SUG";

                cboPedido2.DataSource = lista;
                cboPedido2.TextField = "DES_TIPO_PEDIDO";
                cboPedido2.ValueField = "TIPO_PEDIDO";
                cboPedido2.DataBind();
                cboPedido2.Value = "SUG";
            }
            catch (Exception ex)
            {
                GuardarExceptionLog(ex.Message, ex, "ListaTipoPedido");
                MensajesError(ex.Message, ex, "ListaTipoPedido");
            }
          
        }

        protected void btnDocRelacionado_Click(object sender, EventArgs e)
        {
          int  intIndex = dgImportacionCab.FocusedRowIndex;
            String strNumPedido = dgImportacionCab.GetRowValues(intIndex, "NUM_PEDIDO").ToString();

            if (strNumPedido == "")
            {
                strMsg = "Debe Seleccionar Una Importacion En La Página Actual.";
                MostrarComentario(strMsg);
                cargarMaestro();
                return;
            }
            Session["Opcion"] = "op";
            Session["ID_ORG_VTA"] = cboOrgaVEnta.Value;
            Session["DES_ORG_VTA"] = cboOrgaVEnta.Text;         
            Session["NUM_PEDIDO"] = strNumPedido;
            String IdImpCab = dgImportacionCab.GetRowValues(intIndex, "ID_IMP_IMPORTACION_CAB").ToString();
            Session["idCab"] = IdImpCab;
            Response.Redirect("~/Repuestos/wFrmSeguimientoImportacionDocumentos.aspx?id=3");
        }

    }
}